package com.ruoyi.tfjData.utils;

import com.ruoyi.common.utils.BigDecimalUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.tfjData.domain.plat.DataTfj;

import java.math.BigDecimal;
import java.math.RoundingMode;

/**
 * 工况计算工具类
 */
public class GongkuangUtils {

    /**
     * 风量计算
     * 风杯法 :平均风速 * 测风面积
     * 静压全压法:平均风速 * 皮托管测点面积
     * 静压差法:0.99 * 测压面积小 * 测压面积大 * Math.sqr( 2 * 差压 / ( 空气密度  * （测压面积大² - 测压面积小²）)  )
     *
     * @return
     */
    public static String fengLiangFunc(DataTfj dataTfjModify) {
        String chy = Math.abs(Float.parseFloat(dataTfjModify.getChy())) + "";
        switch (dataTfjModify.getCshff()) {
            case "静压全压法":
                String pjfs = dataTfjModify.getPjfs();
                if (StringUtils.isEmpty(pjfs) || StringUtils.isEmpty(dataTfjModify.getPtgcdmj())) {
                    return "";
                }
                return BigDecimalUtils.mul(pjfs, dataTfjModify.getPtgcdmj()).setScale(2, RoundingMode.HALF_UP).toString();
            case "静压差法":
                if (StringUtils.isEmpty(dataTfjModify.getCymjx()) || StringUtils.isEmpty(dataTfjModify.getCymjd()) || StringUtils.isEmpty(chy) || StringUtils.isEmpty(dataTfjModify.getKqmd())) {
                    return "";
                }
                String param1 = BigDecimalUtils.mul("0.99", BigDecimalUtils.mul(dataTfjModify.getCymjx(), dataTfjModify.getCymjd()).toString()).toString();
                String cymjx2 = BigDecimalUtils.mul(dataTfjModify.getCymjx(), dataTfjModify.getCymjx()).toString();
                String cymjd2 = BigDecimalUtils.mul(dataTfjModify.getCymjd(), dataTfjModify.getCymjd()).toString();
                String fenMu = BigDecimalUtils.mul(dataTfjModify.getKqmd(), BigDecimalUtils.sub(cymjd2, cymjx2).toString()).toString();
                if (BigDecimalUtils.compareTo(fenMu, "0") == 0) {
                    return "";
                }
                String param2 = Math.sqrt( BigDecimalUtils.div( BigDecimalUtils.mul("2", chy).toString(), fenMu, 6).doubleValue()) + "";
                return BigDecimalUtils.mul(param1, param2).setScale(2, RoundingMode.HALF_UP).toString();
            case "风杯法":
                String pjfs1 =  dataTfjModify.getPjfs();
                if (StringUtils.isEmpty(pjfs1) || StringUtils.isEmpty(dataTfjModify.getCfmj())) {
                    return "";
                }
                return BigDecimalUtils.mul(pjfs1, dataTfjModify.getCfmj()).setScale(1, RoundingMode.HALF_UP).toString();
            default:
                return "";
        }
    }



    /**
     * 饱和蒸气压计算
     * Math.exp( 12.062 - 4039.558 / (温度 + 235.379) ) * 100 * 1000
     *
     * @return
     */
    public static String baoHeZhengQiYaFunc(String wd) {
        if (StringUtils.isEmpty(wd)) {
            return "";
        }
        String fenMu = BigDecimalUtils.add(wd, "235.379").toString();
        if (BigDecimalUtils.compareTo(fenMu, "0") == 0) {
            return "";
        }
        return new BigDecimal((Math.exp(12.062 -
                BigDecimalUtils.div("4039.558", fenMu, 6).doubleValue()
        ) * 100 * 1000) + "").setScale(2, RoundingMode.HALF_UP).toString();
    }


    /**
     * 空气密度计算
     * 0.003484 * ( 大气压hPa * 100 - 0.3779 * 相对空气湿度/100 * 饱和蒸汽压Pa ) / (273 + 温度)
     * 均速管：0.003484 * （ 大气压 hPa * 100 - 0.3779 * 湿度 * 饱和蒸汽压Pa  ）/ ( 273 + 温度 )
     *
     * @return
     */
    public static String kongQiMiDuFunc(DataTfj dataTfj) {
        String bhzhqy = baoHeZhengQiYaFunc(dataTfj.getWd());
        if (StringUtils.isEmpty(dataTfj.getWd()) || StringUtils.isEmpty(dataTfj.getShd()) ||StringUtils.isEmpty(dataTfj.getDqy()) ||StringUtils.isEmpty(bhzhqy)) {
            return "0.00";
        }
        String fenMu = BigDecimalUtils.add("273", dataTfj.getWd()).toString();
        if (BigDecimalUtils.compareTo(fenMu, "0") == 0) {
            return "0.00";
        }
        if (StringUtils.equals("均速管法", dataTfj.getCshff())) {
            String param1 = BigDecimalUtils.mul(BigDecimalUtils.mul(dataTfj.getShd(), "0.3779").toString(), bhzhqy).toString();
            String dqyPa = BigDecimalUtils.mul(dataTfj.getDqy(), "100").toString();
            String param2 = BigDecimalUtils.sub(dqyPa, param1).toString();
            String param3 = BigDecimalUtils.mul("0.003484", param2).toString();
            BigDecimal result = BigDecimalUtils.div(param3, fenMu, 2);
            if (BigDecimalUtils.compareTo(result.toString(), "0") == -1) {
                return "0.00";
            }
            return result.toString();
        } else {
            String param1 = BigDecimalUtils.mul(dataTfj.getDqy(), "100").toString();
            String param2 = BigDecimalUtils.mul(
                    BigDecimalUtils.div(
                            BigDecimalUtils.mul(dataTfj.getShd(), "0.3779").toString(), "100").toString(), bhzhqy).toString();
            String param3 = BigDecimalUtils.mul("0.003484", BigDecimalUtils.sub(param1, param2).toString()).toString();
            BigDecimal result = BigDecimalUtils.div(param3, fenMu, 2);
            if (BigDecimalUtils.compareTo(result.toString(), "0") == -1) {
                return "0.00";
            }
            return result.toString();
        }
    }


    /**
     * 测风点动压计算
     * 其他：0.5 * 空气密度 * (风量 / 静压测点面积) ²
     * 静压差法:0.5 * 空气密度 * 平均风速²
     *
     * @return
     */
    public static String ceFengDianDongYaFunc(DataTfj dataTfj) {
        switch (dataTfj.getCshff()) {
            case "静压差法":
                if (StringUtils.isEmpty(dataTfj.getPjfs()) || StringUtils.isEmpty(dataTfj.getKqmd())) {
                    return "";
                }
                return BigDecimalUtils.mul("0.5", BigDecimalUtils.mul(dataTfj.getKqmd(),
                        BigDecimalUtils.mul(dataTfj.getPjfs(), dataTfj.getPjfs()).toString()).toString()).setScale(2, RoundingMode.HALF_UP).toString();
            default:
                if (StringUtils.isEmpty(dataTfj.getJycdmj()) || StringUtils.isEmpty(dataTfj.getKqmd()) || StringUtils.isEmpty(dataTfj.getFl())) {
                    return "";
                }
                if (BigDecimalUtils.compareTo(dataTfj.getJycdmj(), "0") == 0) {
                    return "";
                }
                String param1 = BigDecimalUtils.mul(dataTfj.getKqmd(), "0.5").toString();
                String param2 = BigDecimalUtils.div(dataTfj.getFl(), dataTfj.getJycdmj(), 1).toString();
                return BigDecimalUtils.mul(param1, BigDecimalUtils.mul(param2, param2).toString()).setScale(2, RoundingMode.HALF_UP).toString();
        }
    }

    /**
     * 扩散器出口动压计算
     * 0.5 * 空气密度 * (风量 / 扩散器出口面积) ²
     *
     * @return
     */
    public static String kuoSanQiChuKouDYFunc(DataTfj dataTfj) {
        String param1 = BigDecimalUtils.mul(dataTfj.getKqmd(), "0.5").toString();
        String param2 = BigDecimalUtils.div(dataTfj.getFl(), dataTfj.getKsqchkmj(), 1).toString();
        return BigDecimalUtils.mul(param1, BigDecimalUtils.mul(param2, param2).toString()).setScale(2, RoundingMode.HALF_UP).toString();
    }

    /**
     * 轴功率1
     * 电机功率 * 电机效率 * 传动效率
     *
     * @return
     */
    public static String zhouGongLv1Func(DataTfj dataTfjModify) {
        String param1 = BigDecimalUtils.mul(dataTfjModify.getDj1Djgl(), dataTfjModify.getDj1Djxl()).toString();
        return BigDecimalUtils.mul(dataTfjModify.getDj1Chdxl(), param1).setScale(2, RoundingMode.HALF_UP).toString();
    }


    /**
     * 轴功率2
     * 电机功率 * 电机效率 * 传动效率
     *
     * @return
     */
    public static String zhouGongLv2Func(DataTfj dataTfjModify) {
        String param1 = BigDecimalUtils.mul(dataTfjModify.getDj2Djgl(), dataTfjModify.getDj2Djxl()).toString();
        return BigDecimalUtils.mul(dataTfjModify.getDj2Chdxl(), param1).setScale(2, RoundingMode.HALF_UP).toString();
    }


    /**
     * 风机装置静压
     * 抽出式：相对静压 - 测风点动压
     * 压入式：相对静压
     *
     * @return
     */
    public static String fengJiZhuangZhiJYFunc(DataTfj dataTfjModify) {
        switch (dataTfjModify.getTffs()) {
            case "抽出式":
                //抽出式
                //静压取绝对值
                return BigDecimalUtils.sub(dataTfjModify.getXdjy(), dataTfjModify.getCddy()).setScale(2, RoundingMode.HALF_UP).toString();
            case "压入式":
                return dataTfjModify.getXdjy();
            default:
                break;
        }
        return "";
    }


    /**
     * 风机装置全压
     * 抽出式：风机装置静压 + 扩散器出口动压
     * 压入式：风机装置静压 + 测风点动压
     *
     * @return
     */
    public static String fengJiZhuangZhiQYFunc(DataTfj dataTfjModify) {
        switch (dataTfjModify.getTffs()) {
            case "抽出式":
                return BigDecimalUtils.add(dataTfjModify.getFjjy(), dataTfjModify.getKsqchkdy()).setScale(2, RoundingMode.HALF_UP).toString();
            case "压入式":
                return BigDecimalUtils.add(dataTfjModify.getFjjy(), dataTfjModify.getCddy()).setScale(2, RoundingMode.HALF_UP).toString();
            default:
                break;
        }
        return "";
    }

    /**
     * 风机装置静压功率 kW
     * 风机装置静压 * 风量 / 1000
     *
     * @return
     */
    public static String fengJiZhuangZhiJYGLFunc(DataTfj dataTfjModify) {
        return BigDecimalUtils.div(
                BigDecimalUtils.mul(dataTfjModify.getFjjy(), dataTfjModify.getFl()).toString(),
                "1000", 2).toString();
    }

    /**
     * 风机装置全压功率 kW
     * 风机装置全压 * 风量 / 1000
     *
     * @return
     */
    public static String fengJiZhuangZhiQYGLFunc(DataTfj dataTfjModify) {
        return BigDecimalUtils.div(
                BigDecimalUtils.mul(dataTfjModify.getFjqy(), dataTfjModify.getFl()).toString(),
                "1000", 2).toString();
    }

    /**
     * 风机装置静压效率
     * 风机装置静压功率 / ( 轴功率1 + 轴功率2 )
     *
     * @return
     */
    public static String fengJiZhuangZhiJYXLFunc(DataTfj dataTfjModify) {
        String fenMu = BigDecimalUtils.add(dataTfjModify.getDj1Zhgl(), dataTfjModify.getDj2Zhgl()).toString();
        if (BigDecimalUtils.compareTo(fenMu, "0") == 0) {
            return "";
        }
        return percentJudge(BigDecimalUtils.div(
                dataTfjModify.getFjjygl(),
                fenMu, 4).toString());
    }

    /**
     * 风机装置全压效率
     * 风机装置全压功率 / ( 轴功率1 + 轴功率2 )
     *
     * @return
     */
    public static String fengJiZhuangZhiQYXLFunc(DataTfj dataTfjModify) {
        String fenMu = BigDecimalUtils.add(dataTfjModify.getDj1Zhgl(), dataTfjModify.getDj2Zhgl()).toString();
        if (BigDecimalUtils.compareTo(fenMu, "0") == 0) {
            return "";
        }
        return percentJudge(BigDecimalUtils.div(
                dataTfjModify.getFjqygl(),
                fenMu,
                4).toString());
    }

    /**
     * 风机运行效率
     * 抽出式：风机装置静压效率
     * 压入式：风机装置全压效率
     *
     * @return
     */
    public static String fengJiYunXingXiaoLvFunc(DataTfj dataTfj) {
        switch (dataTfj.getTffs()) {
            case "抽出式":
                if (StringUtils.isEmpty(dataTfj.getFjjyxl())) {
                    return "";
                }
                return percentJudge(dataTfj.getFjjyxl());
            case "压入式":
                if (StringUtils.isEmpty(dataTfj.getFjqyxl())) {
                    return "";
                }
                return percentJudge(dataTfj.getFjqyxl());
            default:
                break;
        }
        return "";
    }

    /**
     * 工序能耗
     * 1 /  ( 3.6 *风机运行效率  )
     *
     * @return
     */
    public static String gongXvNengHaoFunc(String fjyxxl) {
        if (StringUtils.isEmpty(fjyxxl)) {
            return "";
        }
        String param1 = BigDecimalUtils.mul(fjyxxl, "3.6").toString();
        if (BigDecimalUtils.compareTo(param1, "0") == 0) {
            return "";
        }
        return BigDecimalUtils.div("1", param1, 1).toString();
    }



    /**
     * 风速
     * 皮托管系数 * Math.sqr ( 2 * 差压/ 空气密度 )
     *
     * @return
     */
    public static String fengSuFunc(DataTfj dataTfjModify) {
        if (StringUtils.isEmpty(dataTfjModify.getPtgxsh()) || StringUtils.isEmpty(dataTfjModify.getChy())) {
            return "";
        }
        //经商讨 差压计算不需要符号
        dataTfjModify.setChy(Math.abs(Float.parseFloat(dataTfjModify.getChy())) + "");
        double param = BigDecimalUtils.div(BigDecimalUtils.mul("2", dataTfjModify.getChy()).toString(), dataTfjModify.getKqmd(), 6).doubleValue();
        double param1 = Math.sqrt(param);
        String sqrtParam = BigDecimal.valueOf(param1).setScale(6, RoundingMode.HALF_UP).toString();
        return BigDecimalUtils.mul(dataTfjModify.getPtgxsh(), sqrtParam).setScale(2, RoundingMode.HALF_UP).toString();
    }

    /**
     * 通风机组效率
     * 全压功率 /（电机功率1+电机功率2）
     *
     * @return
     */
    public static String tongFengJiZuXlFunc(DataTfj dataTfjModify) {
        String fenMu = BigDecimalUtils.add(dataTfjModify.getDj1Djgl(), dataTfjModify.getDj2Djgl()).toString();
        return BigDecimalUtils.div(dataTfjModify.getFjqygl(), fenMu, 4).toString();
    }

    /**
     * 效率类小于0则返回0 大于1则返回1
     *
     * @param value
     * @return
     */
    private static String percentJudge(String value) {
        if (BigDecimalUtils.compareTo(value.toString(), "0") == -1) {
            return "0.00";
        }
        if (BigDecimalUtils.compareTo(value.toString(), "1") == 1) {
            return "1.00";
        }
        return value;
    }
}
